package com.rainyun.rc.orm;

import java.sql.SQLException;
import java.util.Map;

import com.rainyun.rc.config.ErrorHandler;
import com.rainyun.rc.common.VersionException;

public interface RainDB {

	
	//核心初始操作
	/**初始化所有实体类(如创表,文件,覆盖兼容版本等操作),同时对表版本进行检查
	 *  若出现版本不兼容,则抛出异常
	 *  如果出现其他错误(如执行有误,连接不成功等),返回null
	 * @throws SQLException 
	 * */
	public boolean initAll() throws VersionException,SQLException;
	
	/**创建一条新语句,指向某实体类,返回新的子Orm对象*/
	public RainSql newSql(Class<?> clazz);
	/**导入实体类,参数(实体类,储存路径(如表名,文件名等))*/
	public RainDB addClazz(Class<?> clazz,String path);
	/**获取实体类的信息(确保实体类已导入,否则返回null)*/
	public ClazzInfo getClazzInfo(Class<?> clazz);
	/**通过路径获取实体类的信息(确保实体类已导入,否则返回null)*/
	public ClazzInfo getClazzInfo(String path);
	/**获取所有导入的实体类的信息*/
	public Map<Class<?>,ClazzInfo> getAllClazzesInfo();
	
//	/**执行查询,统计数据行数*/
//	public int count(String col_name);
//	/**执行查询,统计某列总和*/
//	public int sum(String col_name);
//	/**执行查询,统计某列平均数*/
//	public int avg(String col_name);
	
	public void setErrorHandler(ErrorHandler handler);
	
	/**获取最近一次执行的语句错误(若语句执行无错误,返回null)*/
	public Exception getError();
	
	/**设置调试模式*/
	public void setDebug(boolean debug) ;
	public boolean isDebug();
	
	/**开始事务,事务开始后,出现任何数据库报错<br>
	 * 后,在回滚前任何sql语句都不会执行<br>
	 * 另外,该操作会清空当前的Error
	 * @throws SQLException */
	public boolean begin() throws SQLException;
	/**数据库回滚操作*/
	public boolean rollback() throws SQLException;;
	/**提交事务*/
	public boolean commit() throws SQLException;;
}






